// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Tests declaring constructors with various clauses.

// SharedOptions=--enable-experiment=primary-constructors

import "package:expect/expect.dart";

// Generics
class GenericsHeader<T>(final T x);

// Extends
class Base {}

class ExtendsHeader(final int x) extends Base;

// Implements
abstract class Interface {
  int method();
}

class ImplementsHeader(final int x) implements Interface {
  @override
  int method() => x + 1;
}

// With
mixin Mixin {}

class WithHeader(final int x) with Mixin;

// Combination
class AllHeader<T>(final T x) extends Base with Mixin implements Interface {
  @override
  int method() => 1;
}

void main() {
  Expect.equals(1, GenericsHeader<int>(1).x);
  Expect.equals(1, ExtendsHeader(1).x);
  Expect.equals(2, ImplementsHeader(1).method());
  Expect.equals(1, ImplementsHeader(1).x);
  Expect.equals(1, WithHeader(1).x);
  Expect.equals(1, AllHeader<int>(1).method());
  Expect.equals(1, AllHeader<int>(1).x);
}
